#include <iostream>
#include <signal.h>

void PrintSigset_t(sigset_t sigset)
{
    for (int i = 64; i >= 1; i--)
        if (sigismember(&sigset, i))
            std::cout << 1;
        else
            std::cout << 0;
    std::cout << std::endl;
}

int main()
{
    // 阻塞
    sigset_t set, oldset;
    sigemptyset(&set);
    sigaddset(&set, 2);
    sigaddset(&set, 40);
    sigprocmask(SIG_BLOCK, &set, &oldset); // 操作进程block表, 用于阻塞指定进程
    // 查看
    int i = 1;
    while (i)
    {
        if (i >= 3 && i < 8)
        {
            raise(2); // 给自己发指定信号
        }
        else if (i >= 8 && i < 13)
        {
            raise(40);
        }
        sigset_t pending;
        sigemptyset(&pending);
        sigpending(&pending);
        std::cout << "pending: ";
        PrintSigset_t(pending);
        i++;
        sleep(1);
    }
    // for (size_t i = 0; i < 5; i++)
    // {
    //     raise(2); // 给自己发指定信号
    //     sigset_t pending;
    //     sigemptyset(&pending);
    //     sigpending(&pending);
    //     std::cout << "pending: ";
    //     PrintSigset_t(pending);
    //     sleep(1);
    // }
    // for (size_t i = 0; i < 5; i++)
    // {
    //     raise(40); // 给自己发指定信号
    //     sigset_t pending;
    //     sigemptyset(&pending);
    //     sigpending(&pending);
    //     std::cout << "pending: ";
    //     PrintSigset_t(pending);
    //     sleep(1);
    // }

    return 0;
}